// 引入dayjs插件对选中的时间的时间戳转换为需要的格式
import dayjs from "dayjs"
// 引入验证插件
import Schema from 'validate'
// 实例化配置验证规则 
// length: { min: 3, max: 32 }
const repairinfo = new Schema({
  houseId: {
    type: String,
    required: true,
    message: '请选择房屋'
  },
  repairItemId: {
    type: String,
    required: true,
    message: '请选择维修项目'
  },
  mobile: {
    type: String,
    required: true,
    match: /^1[3-9]\d{9}$/,
    message: '请输入正确的手机号'
  },
  appointment: {
    type: String,
    required: true,
    message: '请选择时间'
  },
  description: {
    type: String,
    required: true,
    message: '请填写描述'
  },
  attachment: {
    // 数组类型
    // use要接收一个对象，对象中为一个函数，函数中自定义验证规则
    type: Array,
    // 函数自定义名称
    // v表示要验证的字段的值，这里指的是attachment
    // 表示附件数组
    // 函数必须返回true或false
    // 如果当前通过验证，那么函数中返会true
    // 如果不通过验证则返回false
    use: {
      attachmentlist(v) {
        return !!v.length
      }
    },
    message: '请上传附件'
  },
}, { strip: false })
// strip解决验证对象后，数据丢失的问题
Page({
  data: {
    currentDate: new Date().getTime(),
    houseLayerVisible: false,
    repairLayerVisible: false,
    dateLayerVisible: false,
    houseList: [
    ],
    repairItem: [],
    attachment: [],
    // 选中的报修房屋的名字
    houseInfo: "",
    // 选中的报修房屋的id
    houseId: "",
    mobile: "",
    // 选中的维修项目的名字
    repairItemName: "",
    //选中的维修项目的id
    repairItemId: "",
    //选中的时间
    appointment: "",
    // 问题描述
    description: "",
  },

  onLoad({ id }) {
    if (id) {
      wx.setNavigationBarTitle({
        title: '编辑报修房屋'
      })
      this.getputrepair(id)
    } else {
      wx.setNavigationBarTitle({
        title: "添加报修房屋"
      })
    }
    this.gethouseList()
    this.getrepairItem()


  },
  // 编辑页面获取报修房屋详情进行数据回填
  async getputrepair(id) {
    const res = await wx.http.get(`repair/${id}`)

    if (res.code !== 10000) return wx.utils.toast()
    // console.log(res);
    const { status, ...data } = res.data
    // console.log(data);
    this.setData({
      ...data
    })
  },
  // 获取房屋列表
  async gethouseList() {
    const res = await wx.http.get('house')
    console.log(res);
    this.setData({
      houseList: res.data
    })
  },
  // 获取维修项目
  async getrepairItem() {
    const res = await wx.http.get('repairItem')
    this.setData({
      repairItem: res.data
    })
  },
  //点击选中房屋触发
  onHouseselect(e) {
    // console.log(e);
    // 获取当前房屋选中项添加到data中
    this.setData({
      houseInfo: e.detail.name,
      houseId: e.detail.id
    })
  },
  // 点击选中的维修项目
  onRepairselect(e) {
    // 获取维修项目选中项
    this.setData({
      repairItemName: e.detail.name,
      repairItemId: e.detail.id
    })
  },
  // 点击选中的时间
  onDateselect(e) {
    // 获取时间戳转换为接口需要的时间并关闭弹窗
    this.setData({
      appointment: dayjs(e.detail).format('YYYY-MM-DD'),
      dateLayerVisible: false
    })
  },
  // 获取图片上传地址
  afterRead(e) {
    //该事件会返回一个临时路径 
    const { url } = e.detail.file
    // 使用临时路径上传到服务器
    // 使用这个路径将图片上传到服务器中获取远程路径
    wx.uploadFile({
      // 上传的服务器路径
      url: wx.http.baseURL + 'upload',
      // 图片临时路径
      filePath: url,
      // 文件二进制key
      name: 'flie',
      // 请求头
      header: {
        Authorization: `Bearer ${getApp().token}`
      },
      // 成功回调
      success: res => {
        console.log(res);
        const data = JSON.parse(res.data)
        console.log(data);
        // 获取到data中的数组
        // 因为是多张图片不能直接进行赋值
        // 追加到数组中
        const { attachment } = this.data
        attachment.push(data.data)
        this.setData({ attachment })

      }
    })

  },
  // 删除图片
  delpic(e) {
    console.log(e);
    const index = e.detail
    // 事件可以获取到当前点击删除的文件的下标
    // 提示
    wx.showModal({
      title: "您确定要删除吗",
      success: ({ confirm }) => {
        if (confirm) {
          // 获取data中的数组
          const { attachment } = this.data
          // 根据事件对象中的下标删除数组中的元素
          attachment.splice(index, 1)
          // 对data中的数组重新赋值
          this.setData({
            attachment
          })
        }
      }
    })
  },
  // 提交
  async submitbtn() {

    const { id, houseId, repairItemId, mobile, appointment, description, attachment } = this.data
    const params = { id, houseId, repairItemId, mobile, appointment, description, attachment }
    console.log(params);
    //  新增页面没有id,那么就移除id属性
    if (this.data.id === '') {
      delete params.id
    }
    // 验证
    const errors = repairinfo.validate(params)
    //如果没有通过验证
    if (errors.length) {
      // 提示第一条验证
      return wx.utils.toast(errors[0].message)
    }
    //调用接口
    const res = await wx.http.post('repair', params)
    // 如果请求失败，提示用户响应请求失败的信息
    if (res.code !== 10000) return wx.utils.toast(res.message)
    // 添加成功提示

    // 跳转报修列表页面
    await wx.reLaunch({
      url: '/repair_pkg/pages/list/index',
    })
    if (params.id) {
      wx.utils.toast('编辑报修成功')
    } else {
      wx.utils.toast('添加报修成功')
    }
  },
  openHouseLayer() {
    this.setData({ houseLayerVisible: true })
  },
  closeHouseLayer() {
    this.setData({ houseLayerVisible: false })
  },
  openRepairLayer() {
    this.setData({ repairLayerVisible: true })
  },
  closeRepairLayer() {
    this.setData({
      repairLayerVisible: false,
    })
  },

  openDateLayer() {
    this.setData({ dateLayerVisible: true })
  },
  closeDateLayer() {
    this.setData({ dateLayerVisible: false })
  },

})
